home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / cad / eedraw20.zip / EEDRAW.DOC < prev    next >
Text File  |  1991-01-20  |  36KB  |  796 lines

  1.          EEDRAW - Electrical Engineering Drawings (ver 2.0)
  2.          --------------------------------------------------
  3.  
  4.   BECAUSE EEDRAW/EED-PS/EEDEPSON ARE LICENSED FREE OF CHARGE, I PROVIDE
  5. ABSOLUTELY NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.
  6. EXCEPT WHEN OTHERWISE STATED IN WRITING, I GERSHON ELBER PROVIDE EEDRAW/
  7. EED-PS/EEDEPSON PROGRAMS "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
  8. EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  9. WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
  10. ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
  11. YOU. SHOULD THE EEDRAW/EED-PS/EEDEPSON PROGRAMS PROVE DEFECTIVE, YOU ASSUME
  12. THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
  13.  
  14.   IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL GERSHON ELBER,
  15. BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES,
  16. OR OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
  17. USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR A FAILURE
  18. OF THE PROGRAM TO OPERATE WITH PROGRAMS NOT DISTRIBUTED BY GERSHON ELBER)
  19. THE PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES,
  20. OR FOR ANY CLAIM BY ANY OTHER PARTY.
  21.  
  22. 1. INTRODUCTION
  23. ---------------
  24.  
  25. EEDraw is a simple parametric drawing program, specifically designed for
  26. EE (Electrical Engineering) type of drawing. The program fully allows new
  27. parametric types, through library mechanisms, and in fact all the EE types
  28. are defined this way. This library mechanism is extremely useful in defining
  29. new types and can be used for other applications other than EE.
  30.  
  31. The following graphic devices are supported for display:
  32. Hercules, CGA, ATT, EGA, VGA and SVGA (through user provided BGI driver).
  33. The following printing devices are supported (via the printing drivers):
  34. EPSON compatible printers (8 pins), PostScript printers.
  35.  
  36. Usage: EEDraw [-z] *[FileName[.EED]]
  37.  
  38. Options: [-z] Print version number and usage.
  39.  
  40. Quick start: The program comes with quite common setup. If you have a mouse
  41. and a VGA/EGA/Hercules/CGA then you can simply start eedraw. Typing
  42. 'eedraw 82720-1.eed 82720-2.eed' will restart eedraw and prompt you for two
  43. windows for the above two files. Click on left button (return on keyboard)
  44. to pick window corners. Click on right button (space bar on keyboard) if you
  45. want to default size (maximum size). Alt-Q, by default, will take you out.
  46.  
  47. 2. INSTALATION
  48. --------------
  49.  
  50. For correct execution of the main program (EEDraw), the following files must
  51. exist in one of the path directories:
  52.  
  53. 1. EEDraw.exe
  54. 2. EEDraw.cfg
  55. 3. EEDraw.bnd
  56. 4. EEDraw.hlp
  57. 5. *.lib
  58.  
  59. For correct execution of the printer drivers (EED-PS, EED-Epsn), the following
  60. files must exists in one of the path directories (see also Appendix B):
  61.  
  62. 1. EED-PS.exe                1. EED-Epsn.exe
  63. 2. EED-PS.cfg                2. EED-Epsn.cfg
  64. 3. *.lib                3. *.lib
  65.  
  66. The library files (*.lib) are the same for the printer drivers and eedraw
  67. itself and should exist probably only once.
  68. See SETUP below shows how to change the setup of this programs.
  69. The default values should be enough to start and learn this program.
  70.  
  71. 3. SETUP
  72. --------
  73.  
  74. EEDraw set up is done through two files: EEDraw.cfg and EEDraw.bnd.
  75.  
  76. EEDraw.cfg
  77. ----------
  78.  
  79. This files contain global parameters that should be selected and set only
  80. once, in final installation stage. Empty lines or anything after a semicolon
  81. (';') is ignored. This file is read once with eedraw is being started.
  82. Parameters that can be set are:
  83.  
  84. 1. AutoPan - Boolean flag. If TRUE, any operation involves in the drawing
  85.    space (such as move, copy or draw) will auto-pan if cursor exists screen.
  86.    If FALSE, Panning option must be used manually to perform this operation.
  87.    This Boolean flag can be set from the Status main menu.
  88.    For example:
  89.    AutoPan    TRUE
  90. 2. WindowName - Boolean flag. If TRUE each EEDraw data file name is printed
  91.    in the head of the file. If FALSE no name is printed and this makes some
  92.    more space for the drawing itself.
  93.    This Boolean flag can be set from the Window main menu.
  94.    For example:
  95.    WindowName    TRUE
  96. 3. ATKeyboard - Boolean flag. If TRUE, it is assumed AT style keyboard bios
  97.    calls (also known as Enhanced keyboard - if you have F11/F12 on your
  98.    keyboard, good chance you can set this to TRUE). This will enable using
  99.    more complex scan codes, not supported by regular keyboard (such as
  100.    F11/F12). Note however it may HANG your system if it is not so.
  101.    For example:
  102.    ATKeyboard    FALSE
  103. 4. MouseSensitivity - Integer flag. Default is set to 10 which is a good
  104.    start. Making this number bigger makes the mouse less sensitive.
  105.    For example
  106.    MouseSensitivity 10
  107. 5. HVLines - Boolean flag. If TRUE, lines are coerced to be vertical/horizontal
  108.    only. This Boolean flag can be set from the Status main menu.
  109.    For example
  110.    HVLines    TRUE
  111. 6. SnapDistance    - Integer value. Sets the distance in drawing space of points
  112.    to be snapped. You probably do not want to change this, especially not in
  113.    the middle of a drawing. This Integer value can be set from Status main
  114.    menu.
  115.    For example:
  116.    SnapDistance    16
  117. 7. Allow256Colors - Boolean flag. 256 colors BGI drivers will have a richer
  118.    set of colors. If FALSE such a driver will be forced to use only 16 colors
  119.    effectively  having same colors are EGA or VGA default colors (EGAVGA.BGI).
  120.    For example:
  121.    Allow256Colors    FALSE
  122. 8. AllowAsyncEvents - Boolean flag. The user interface supports async event
  123.    handling. This means that one can pop up something while something else
  124.    is being poped up already for example. This has the advantage of the
  125.    ability to arbitrary "jump" between commands. However this may be VERY
  126.    confusing as well. Leave it FALSE at least at the beginning!
  127.    For example:
  128.    AllowAsyncEvents    FALSE
  129. 9. SaveBackMethod - Integer. Underlaying windows are being saved for short
  130.    life time pop up items such as queries. This integer selects where to
  131.    save this data. Options are:
  132.    1 - Conventional memory. This obviously reduces the amount of memory
  133.        for the EE drawings themselves.
  134.    2 - Expanded memory.
  135.    3 - XMS Extanded memory (currently not supported).
  136.    4 - Disk file. For reasonable response this better be a ram disk. See
  137.        also SaveBackPath below.
  138.    The device, this data is saved into, should be able to hold ~100k for
  139.    16 colors BGI drivers and twice that for 256 colors BGI drivers.
  140.    For example:
  141.    SaveBackMethod    1
  142. 10. SaveBackPath - String. This string specifies where back windows should
  143.    be saved. This full path should have a postfix '\' in it.
  144.    For example:
  145.    SaveBackPath        "f:\temp\"
  146. 11. Mouse - Boolean flag. Inform the system if a Mouse exists or not.
  147.    If this is commented out, auto detection will be used.
  148.    For example:
  149.    Mouse    TRUE
  150. 12. Joystick - Boolean flag. Inform the system if a joystick exists or not.
  151.    Must be TRUE for a joystick to be used. Personally the joystick was not
  152.    found accurate enough for this type of drawing.
  153.    Joystick    FALSE
  154. 13. BGIDriverPath - specifies where to look for the *.BGI drivers. Note the
  155.    drivers are supplied with this program (type 'dir *.bgi') and you should
  156.    update this path to the exact place you had moved them.
  157.    For example:
  158.    BGIDriverPath  "C:/TC/BGI"
  159. 14. GraphDriver - Set what type of display device to use. The relative driver
  160.    *.BGI are looked in the directory specified in BGIDriverPath above.
  161.    The following values are valid (same as TC 2.0/TC++ 1.0 graphics.h file
  162.    if that helps):
  163.    0 - Auto detect (default, so you can delete this one...)
  164.    1 - CGA (Hires two colors mode)
  165.    3 - EGA
  166.    4 - EGA64
  167.    5 - EGAMONO
  168.    7 - Hercules
  169.    8 - ATT (Not tested)
  170.    9 - VGA
  171.    999 - SVGA (super VGA - see SVGANameMode below)
  172.    For example:
  173.    GraphDriver    0
  174. 15. SVGANameMode - select a BGI driver to use. This driver is searched for only
  175.    if GraphDriver above is set to 999. Thus driver is assumed to be 800 by
  176.    600 in resolution but any driver with 4:3 aspect ratio will probably be
  177.    o.k.. This driver is searched in the directory specified by BGIDriverPath
  178.    above. For example if the driver you want to use is ATI.BGI and in mode 2:
  179.    SVGANameMode "ATI.2"
  180. 16. Libraries - String value. A list of libraries (neither file type, nor full
  181.    path is required - only the name) to automatically load on restart,
  182.    separated with commas (','). Libraries can also be loaded using the libs
  183.    main menu, and/or will be automatically loaded when a data files needs them.
  184.    For example:
  185.    Libraries    "TTL4LS,EPROM,GENERAL,LINEAR"
  186. 17. FrameWidth - Integer value. Sets the border width for all windows.
  187. 18. Colors control. Below are all colors values to select. Each can be one of
  188.    the following 8 colors:
  189.     0 - WHITE
  190.     1 - BLACK
  191.     2 - RED
  192.     3 - GREEN
  193.     4 - BLUE
  194.     5 - YELLOW
  195.     6 - CYAN
  196.     7 - MAGENTA
  197.    The colors are self explanatory and grouped into the following groups:
  198.    Root controls colors of the back ground root window. Actv sets the active
  199.    drawing window colors. Psv sets the passive window(s) colors. PopUp
  200.    controls all pop ups like queries colors. HighLigh sets the highlight
  201.    objects color. Below are the color groups themselves.
  202.  
  203.     ;Root window - the backgound.
  204.     RootFrameolor    7
  205.     RootForeColor    3
  206.     RootBackColor    5
  207.     RootXorColor    6
  208.  
  209.     ;Pop up menus/queries.
  210.     PopUpFrameColor    2
  211.     PopUpForeColor    5
  212.     PopUpBackColor    5
  213.     PopUpXorColor    6
  214.  
  215.     ;The currently active file/window if any.
  216.     ActvFrameColor    2
  217.     ActvForeColor    5
  218.     ActvBackColor    4
  219.  
  220.     ;All other passive files/windows if any.
  221.     PsvFrameColor    3
  222.     PsvForeColor    5
  223.     PsvBackColor    4
  224.  
  225.     ;High light color - selected items.
  226.     HighLightColor    2
  227.  
  228. If this configuration file is not found in any of the path directories,
  229. a message is printed to the screen, and internal defaults will be used
  230. instead. This is NOT recommended - fix that as soon as you can, as the
  231. internal defaults are not guaranteed to be anything specific.
  232.  
  233. EEDraw.bnd
  234. ----------
  235.  
  236. This file allow you to bind any of the program internal functions (as can be
  237. selected from any of the menus) to a specific key. Note some keys are
  238. hard-bound and can not be used to rebind function (such as arrow keys - see
  239. Functionality below). The format of the file is following.
  240. Empty lines, or lines begin with a semicolon (';') are ignored.
  241. Every line consists of three items: "FunctionName KeyName ScanCode"
  242. seperated by white spaces. FunctionName are the fixed names this program
  243. supports (see blow). KeyName is the name of the key ("AltK" for example) this
  244. FunctionName will be bound to. Up to 4 characters are allowed for KeyName, and
  245. this name will appear in the main menu which contains this function. ScanCode
  246. is the scan code of the bounded key. If the key is regular ascii code, this
  247. ascii code is the scan code. If it is extended code (such as F? keys are), add
  248. 256 to this value. All numbers should be in decimal.
  249. Currently available FunctionName(s) and their associated main menu (see
  250. Functionality section below for their description):
  251.  
  252. File menu:
  253.     LoadEEDFile
  254.     NewEEDFile
  255.     SaveAllEED
  256.     SaveEEDFile
  257.     SaveEEDAsOld
  258.     SaveEEDAsNew
  259.     CloseEEDFile
  260.     ClearAll
  261.     Directory
  262.     ChangeDir
  263.     ShellToDos
  264.     ExitEEdraw
  265.  
  266. Window menu:
  267.     PopWindow
  268.     PushWindow
  269.     MoveWindow
  270.     ResizeWindow
  271.     FullSize
  272.     ShowName
  273.     MakeActive
  274.     NameActive
  275.     PanWindowLeft
  276.     PanWindowRight
  277.     PanWindowUp
  278.     PanWindowDown
  279.  
  280. Display menu:
  281.     ZoomOut
  282.     ZoomIn
  283.     ZoomReset
  284.     RedrawAll
  285.  
  286. Libs menu:
  287.     LoadLibrary
  288.     FreeLibrary
  289.     ViewLibrary
  290.     DirLibrary
  291.  
  292. Draw menu:
  293.     DrawLine
  294.     DrawBus
  295.     DrawConnect
  296.     DrawText
  297.     DrawLibItem
  298.  
  299. Modify menu:
  300.     ModifyMove
  301.     ModifyCopy
  302.     EditLibItem
  303.     ModifyDelete
  304.     ModifyUnDel
  305.     ModifyCut
  306.     ModifyPaste
  307.     ModifyDrop
  308.  
  309. Status menu:
  310.     Help
  311.     GetMemoryFree
  312.     GetZoomFactor
  313.     SetDrawText
  314.     SetTextSize
  315.     SetHVLines
  316.     SetSnapFactor
  317.  
  318. Other (not in any menu):
  319.     SameAgain
  320.  
  321. 4. Functionality
  322. ----------------
  323.  
  324. This section describes the currently available function set, and main modes.
  325. Although most of the keys may be bound to any function as described in the
  326. Setup section (EEDraw.bnd description), some of them are hard-bound and should
  327. not be used. Note that in order for enhanced Keyboard scan codes to be used,
  328. such as F11 and F12, 'ATKeyboard' must be set to TRUE in eedraw.cfg file.
  329. See 'Mouse' and 'Joystick' in eedraw.cfg for mouse and joystick setup.
  330. Below are the "hard-bound" keys:
  331. A. All the numeric keypad (arrow keys, home, PhUp, End, PgDn). These keys
  332.    are used to move to cursor (even if mouse exists).
  333. B. All the numeric keys but 0 (used by shift-arrows).
  334. C. Enter (or Return) key. this is the SELECT key.
  335. D. Space bar. This is the ABORT key.
  336. E. Tab. This is equivalent to MIDDLE button key.
  337.  
  338. The arrow keys are used to move the cursor (co-exist with mouse), and if
  339. shifted, move cursor faster. In addition to the cursor movement, two
  340. important keys are defined as well:
  341. A. SELECT key, hard-bound to the Enter (or Return), left button on mouse,
  342.    if such exists, and button 1 on the joystick, if exists.
  343. B. ABORT key, hard-bound to the Space bar, right button on mouse if such
  344.    exists, and button 2 on the joystick, if exists.
  345. C. MIDDLE key, hard-bound to the Tab, middle button on mouse if such
  346.    exists (or pressing both mouse buttons), and both buttons on the joystick.
  347. All the eedraw functions described below uses these hard-bound keys.
  348.  
  349. This version supports multi file editing via multi window system (running
  350. on regular DOS). Each time a file is being open, a new window is created
  351. for it. If window header is to be shown (see ShowName function below) the
  352. file name the window is associated with is displayed in addition to its
  353. status as:
  354. O)riginal - this file is exactly the same as first loaded in.
  355. M)odified - the current file state should be saved. Data has been modified.
  356. S)aved    - file has been modified since it was first loaded, but current
  357.         state is being saved.
  358. There is no limit to number on the number of windows/files that may be open
  359. at once, aside from DOS and memory limits. The libraries are being shared
  360. between all files, so reduce memory usage. This means that even if two
  361. (or more) files needs LINEAR.LIB it will be loaded once into memory.
  362. However, there is no way for the program to detect which file uses which
  363. library when they are being saved and it is assumed ALL libraries currently
  364. loaded are being used by all files.
  365.  
  366. Few type of interactors are defined to query the user:
  367. A. Yes/No question - prompt the question, with Yes and No buttons. The SELECT
  368.    key will select the answer. ABORT key is ignored. One may use the Y/N
  369.    keys as well to signal Yes/No answer.
  370. B. Continue question - prompt a message, and wait for SELECT on the continue
  371.    button. ABORT key is ignored. One may use the C key to continue as well.
  372. C. String question - prompt a message, and waits for string input. This
  373.    facilitates a full line editor as follows (independent of key bindings):
  374.    * Right and Left arrows will move right and left.
  375.    * Insert toggles Insert/Overwrite modes (toggles cursor shape).
  376.    * Delete deletes current character.
  377.    * Backspace deletes character to the back.
  378.    * Home and End will move to beginning/end of string respectively.
  379.    * Esc clears the current string.
  380.    * Return will terminate editing.
  381. D. List question - prompt with a list of items (files names for example).
  382.    An item will be picked by the SELECT key if applicative (when viewing
  383.    a directory nothing needs to be picked). ABORT key will usually abort
  384.    the operation, but may have some special operation as well or may be
  385.    ignored.
  386. E. Menu(s) question. Two types of menus are used - top down from the main menu,
  387.    and pop up on special occasions. Menus behave very much like List questions.
  388.    SELECT key selects menu item while ABORT key usually abort the menu with no
  389.    selection at all.
  390.  
  391. A. File menu:
  392.     LoadEEDFile - Prompts for a file name (List question), and reads it
  393.         from the current directory, if SELECT key, abort if ABORT key.
  394.         Note file type must be '.eed'. A new window is created for
  395.            it while the user is prompted to set the window size (see
  396.         ResizeWindow).
  397.     NewEEDFile - Creates a new drawing window not assosicated with any
  398.         file. This is the way to create new drawings. The user is
  399.         prompted to set the window size (see ResizeWindow).
  400.     SaveAllEED - Saves all unsaved drawings. This is probably useful
  401.         before quiting eedraw.
  402.     SaveEEDFile - Saves currently edited file. This routine can be used
  403.         only after a new file was saved at list once, or it was loaded.
  404.         In both cases, it will be saved on the same name, after
  405.         renaming old one to have '.bak' extension.
  406.         Ask for verification (Yes/No question).
  407.     SaveEEDAsOld - Same as SaveEEDFile, but prompts with list of all '.eed'
  408.         files in current directory, and saved by the name selected if
  409.         SELECT key, or abort if ABORT key.
  410.     SaveEEDAsNew - Same as SaveEEDFile, but prompts for a new file using
  411.         String question.
  412.     CloseEEDFile - Closes a drawing window associated with a file. Note
  413.         that non of the above saving functions close the window,
  414.         and this function is the only way to close a window.
  415.         Ask for verification if data modified (Yes/No question).
  416.     ClearAll - Clears all eedrawing data in a picked window. The user is
  417.         requested to "click" on the window to clear.
  418.         Ask for verification (Yes/No question).
  419.     Directory - Display content of current directory as in List question.
  420.         both SELECT key and ABORT key can be used to exit this mode.
  421.         Unlike LoadEEDFile, all files are displayed.
  422.     ChangeDir - Prompts with String question for a new directory. Old
  423.         directory is provided to begin with.
  424.     ShellToDos - "Fork"s (I wish this was true...) to the DOS O.S. . Type
  425.         'exit' at the DOS prompt to return to EEDraw.
  426.     ExitEEdraw - Exits the Program.
  427.         Ask for verification (Yes/No question) and issue a warning
  428.         if not all files were saved.
  429.  
  430. Window menu:
  431.     PopWindow - Pops up a window the user picks. The window is being
  432.         picked by "clicking" on it. ABORT key aborts this operation.
  433.     PushWindow - Pushes down a window the user picks. The window is being
  434.         picked by "clicking" on it. ABORT key aborts this operation.
  435.     MoveWindow - Moves a window the user picks. The window is being
  436.         picked by "clicking" on it. ABORT key aborts this operation.
  437.         The picked window frame is poped up so current position is
  438.         all visible. The cursor prompt changes to a box in the window
  439.         size that the user needs to place as the new position.
  440.     ResizeWindow - Same as MoveWindow but for resizing the window.
  441.     FullSize - Blows up a window the user picks. The window is being
  442.         picked by "clicking" on it. ABORT key aborts this operation.
  443.         This make the window as big as possible in the current
  444.         display device. Calling this function again on the window
  445.         will recover its original size.
  446.         This function may be activated on drawing windows only.
  447.     ShowName - A toggle to show/hide window name. The window name is
  448.         simply the filename the window is associated with. Also
  449.                 displayed is O)riginal, M)odified, or S)aved file status
  450.                 as O/M/S letters.
  451.     MakeActive - All drawing operations are performed on the active
  452.         window. If only one drawing window exists it is the active
  453.         one. If more, exactly one of them is the active one. This
  454.         function selects the active window by a user pick. The window
  455.         is being picked by "clicking" on it. ABORT key aborts this
  456.         operation.
  457.     NameActive - All drawing operations are performed on the active
  458.         window. If only one drawing window exists it is the active
  459.         one. If more, exactly one of them is the active one. This
  460.         function selects the active window by name. A list query of
  461.         all drawing window (file) names is being poped up and the
  462.         selected becomes the active one.
  463.     PanWindowLeft - Pan the ACTIVE window a half window to the left.
  464.     PanWindowRight - Pan the ACTIVE window a half window to the right.
  465.     PanWindowUp - Pan the ACTIVE window a half window up.
  466.     PanWindowDown - Pan the ACTIVE window a half window down.
  467.  
  468. Display menu:
  469.     ZoomOut - Zoom out (center of screen remains at center) by factor of 2.
  470.         Note that if you zoom out from regular zoom factor, text will
  471.         disappear as it can not be shrinked. You can enable text from
  472.         the Status menu manually.
  473.     ZoomIn - Zoom in (center of screen remains at center) by factor of 2.
  474.     ZoomReset - Reset Zoom value to the regular zoom factor.
  475.     RedrawAll - Redraw all screen.
  476.  
  477. Libs menu:
  478.     LoadLibrary - Prompts for a file name (List question), and reads it
  479.         from the current directory, if SELECT key, abort if ABORT key.
  480.         Note file type must be '.lib'.
  481.     FreeLibrary - Prompts with all loaded libraries with List question,
  482.         and frees the selected one if SELECT key, abort if ABORT.
  483.     ViewLibrary - Prompts with all loaded libraries with List question,
  484.         If a library has been selected via SELECT key, prompt with
  485.         all parts defined in this library again with a List question.
  486.         Selection of a part with SELECT key will display it. ABORT will
  487.         go back to library List question, which can be aborted again
  488.         via the ABORT key.
  489.     DirLibrary - Displays content of current directory library files
  490.         (those with '.lib' extension) as in List question.
  491.         both SELECT key and ABORT key can be used to exit this mode.
  492.  
  493. Draw menu:
  494.     DrawLine - Enters drawing mode. If HVLines is set (see SETUP,
  495.         EEDraw.cfg section), only horizontal/vertical lines are
  496.         allowed.
  497.         In this mode, pressing SELECT key will insert a new point
  498.         in the created polyline and pressing ABORT will delete the
  499.         last entered point.
  500.         If however, there are no points at all in the current polyline,
  501.         ABORT key will abort this mode.
  502.         Also, pressing SELECT twice (at the SAME place as the last
  503.         point entered) will complete the drawn polyline.
  504.         MIDDLE key will also complete the line drawing.
  505.     DrawBus - Same as DrawLine, but draw thicker lines.
  506.     DrawConnect - Draw a connection junction, if SELECT key is pressed,
  507.         or abort if ABORT key is pressed.
  508.     DrawText - Prompts for a string with String question, and then position
  509.         the text horizontally or vertically. If the positioning is
  510.         terminated with ABORT it is ignored, SELECT will update.
  511.     DrawLibItem - Prompts for a part name with String question. If this is
  512.         not the first invocation to this mode, last part will be
  513.         used as default string (remember you can always use Esc to
  514.         clear to a fresh line). If part is found (name is exactly the
  515.         same as    shown in the ViewLibrary function above), a pop up
  516.         menu will allow to rotate it 90 degree CW or CCW or mirror it.
  517.         Successive SELECT will transform the library item to the
  518.         desired orientation, while ABORT will abort this DrawLibItem
  519.         mode. SELECT PlaceIt (top menu entry) will allow to position
  520.         the part in the exact place.
  521.         The user is also being prompted for Chip (i.e. 74LS00) and
  522.         Part (i.e. IC7) names if they are required/allowed (see
  523.         Appendix on library file definition) for this part.
  524.         These are positioned similar to the way DrawText position
  525.         its text, except that Chip name    is already known and can not
  526.         be modified.
  527.  
  528. Modify menu:
  529.     This menu is heavily based on Picking objects. a single object is
  530.     being picked if the cursor is on an object. The cursor is considered
  531.         on an object if one of the following:
  532.     A. Line and Bus items: the cursor is on one of the Line/Bus end points
  533.        (any point that was set by SELECT when it was created, including
  534.        internal points).
  535.     B. Connect item: the cursor is on the Connect center.
  536.     C. Text item: the cursor is inside the smallest axes parallel bounding
  537.        box holding this text.
  538.     D. Library item: the cursor is on any polyline end point (including
  539.        internal points).
  540.  
  541.     The picked object will blink. SELECT key will select it, ABORT key
  542.     will cause the next object, if such exists at this position, to blink
  543.     until one is selected via the SELECT key, or no more objects can be
  544.     picked.
  545.  
  546.     If no object at all is found at the cursor point, the point is used
  547.     as first corner of a box to pick a set of objects - a second SELECT
  548.     key will pick the second corner of the box, ABORT key will abort this
  549.     mode. All objects intersect with the defined box, will be considered
  550.     picked, with no more verification.
  551.  
  552.     ModifyMove - Pickes object(s), and moves it (them) to a new position.
  553.         Once the object(s) i s(are) picked, SELECT key will set
  554.         its(their) new    position, ABORT will leave it unchanged.
  555.     ModifyCopy - Pickes object(s), and copies it (them) to a new position.
  556.         Once the object(s) is (are) picked, SELECT key will place
  557.         it(them) in new position, ABORT will abort the copy operation.
  558.     EditLibItem - if the picked object(s) is a single library item, allows
  559.         editing any of the following (via a pop up menu):
  560.         A. Editing the part name. This is the only way to add a part
  561.            name to a library item if the library item has none by
  562.            default.
  563.         B. Toggle to Draw/Undraw chip name (if this chip is allowed
  564.            to have one).
  565.         C. Reposition Chip name (if this chip have one).
  566.         D. Reposition Part name (if this chip is allowed to have one).
  567.         E. Reorient the lib part.
  568.         Picking one of the above via SELECT will allow text
  569.         positioning or text editing (via String question). ABORT or
  570.         selecting Done (first menu entry) will abort this EditLibItem
  571.         mode.
  572.     ModifyDelete - Deletes the picked object(s). The deleted object(s) is
  573.         (are) saved in a special 10 places deep stack, and deleted
  574.         items can be undeleted using the ModifyUnDel function.
  575.         Each of the 10 placed stack can hold any result of a pick
  576.         no matter how many objects are inside.
  577.         This Delete/Undelete mechanism can be used to cut and paste
  578.         even between different files/windows - this stack is never
  579.         being cleared.
  580.     ModifyUnDel - Undelete the last delete operation (see ModifyDelete),
  581.         from the delete stack (LIFO).
  582.     ModifyCut - Same as ModifyDelete, but original is NOT deleted. The
  583.         object is being pushed onto the undelet stack and can then be
  584.         ModifyUnDel, ModifyPaste etc.
  585.     ModifyPaste - Same as ModifyUnDel, but the undelete stack is NOT
  586.         modified. This function enables pasting and placing the same
  587.         object few times.
  588.     ModifyDrop - Drops the top of stack from the undelete stack. May be
  589.         used to drop a cut/paste object sequence from stack.
  590.  
  591. Status menu:
  592.     Help - Pops up an help window and displays the content of eedraw.hlp.
  593.         If the help window is already poped up, this function will
  594.         close it (acts like a toggle.).
  595.     GetMemoryFree - Prompts with a continue question, on the current free
  596.         memory. Getting close to zero is unsafe!
  597.     GetZoomFactor - Allows you to see the current zoom factor
  598.     SetDrawText - Sets drawing of text smaller than minimal size (8x8).
  599.         This will draw text at 8x8 size which is too big, but may be
  600.         sometimes useful.
  601.     SetTextSize - Sets the scaling (up only) of the text size. By default
  602.         this is equal to 1, but up to scaling up by 7 is allowed.
  603.     SetAutoPan - If TRUE, auto panning will occur when placing
  604.         objects that have been moved off the active WINDOW. The
  605.         object will be place so it is centered in the window.
  606.     SetHVLines - Allows drawing of diagonal lines as well if set to FALSE.
  607.         Uses Yes/No question.
  608.     SetSnapFactor - Sets the invisible grid the cursor position is
  609.         snapped to. You probably do not want to change this,
  610.         especially not in the middle of file editing.
  611.         Uses String question, and display current Snap factor to
  612.         begin with.
  613.  
  614. Other (not in any menu):
  615.     SameAgain - Executes the last function again. This is hard bounded
  616.         to MIDDLE key, although in may be bounded to another key
  617.         as well.
  618.  
  619. 5. Spacial Notes
  620. ----------------
  621.  
  622. Designing using A4 page size does not require much memory even when few
  623. libraries are loaded. My system with 640k (-70k of the O.S) has almost 300k
  624. free to use (Use the GetMemoryFree function to query free memory), when all the
  625. provided libraries are loaded. I guess you will need to work hard to get down
  626. to less than 100k. If you succeed and/or you system has less than 640k memory,
  627. make yourself a rule: never to go below 64k of free memory. The program need
  628. about 32k of temporary memory for the different operations, and getting close
  629. to that is dangerous! When you approach 32k of free memory, you will be
  630. issued a warning (Continue question):
  631.  
  632. Free memory too small - dangerous to continue.
  633.  
  634. Every 30 second (if you do any operation in that time). Continuing at this
  635. point may result with loss of all your work - the program will exit when no
  636. more memory will be available! This is especially true if 'SaveBackMethod'
  637. in eedraw.cfg is set to conventional memory.
  638.  
  639. Yes, I know this is ugly, but you eat what you cook, right? I used this
  640. program quite a bit, and never succeeded to go below 200k, so why bather.
  641.  
  642. 6. Acknowledgement
  643. ------------------
  644.  
  645. I would like to thank skh@eng.sun.com (Steve Howell) for his great comments
  646. during the last stages of bringing version 2.0 up.
  647.  
  648. -------------------------------------------------------------------------------
  649.  
  650. Appendix A. Glossary
  651. --------------------
  652.  
  653. SELECT Key - The key used for the select operation. Currently hard-bound to
  654.     Enter (or Return), the Left mouse button if mouse exists, and to
  655.     Button 1 in a joystick.
  656.  
  657. ABORT Key - The key used for the abort operation. Currently hard-bound to
  658.     Space bar, the Right mouse button if mouse exists and to Button 2
  659.     in a joystick.
  660.  
  661. MIDDLE key - Another general purpose key. Currently hard-bound to
  662.     Tab keyr, the Middle mouse button if mouse exists and has middle
  663.     button (or both right and left buttons pressed simultaneously)
  664.     and to both Buttons of the joystick.
  665.  
  666. Screen Space - the space of the display device. Depends on the graphic
  667.     device coordinates on the selected mode.
  668.  
  669. Drawing Space - the space in which the drawing objects exist. This space
  670.     is bounded by a wide box (zoom out twice to see this box on an
  671.     empty drawing) so it will fit into an A4 (8.5" by 11") page in both
  672.     the EPSON and the PostScript printer drivers (see Appendix B).
  673.  
  674.  
  675. Appendix B. Printer drivers
  676. ---------------------------
  677.  
  678. The following printer drivers are available (see also installation section):
  679.  
  680. 1. EPSON printer.
  681.  
  682.     Usage: EEDEpson [-g] [-r] [-1] [-2] [-3] [-d] [-z] FileName[.EED]
  683.  
  684.     Options: [-g] Output goes to standard output as 1 bit per pixel (B&W)
  685.             GIF file.
  686.          [-r] Output goes to standard output as raw data.
  687.          [-1], [-2], [-3] Output goes to LPT1:, LPT2:, LPT3:
  688.             respectively.
  689.          [-d] if Output goes to Epson printer - print in double the
  690.             density.
  691.          [-z] Print version number and usage.
  692.  
  693.         * if neither [-g], not [-r] are specified, output is in Epson
  694.           compatible format (default).
  695.         * If non of [-1], [-2], [-3] are specified, output goes to
  696.           standard output.
  697.         * [-1], [-2], [-3], [-d] are ignored if [-g] or [-r] are
  698.           specified.
  699.  
  700. 2. PostScript Printer.
  701.  
  702.     Usage: EED-PS [-f FontName] [-z] FileName[.EED]
  703.  
  704.     Options: [-z] Print version number and usage.
  705.             [-f FontName] Specify the font name to use instead of the
  706.                default name (Times-Roman).
  707.  
  708. Appendix C. Library file format
  709. -------------------------------
  710.  
  711.     This appendix describes the format of the library file. It contains
  712. all the information required to create your own libraries. The libraries are
  713. designed to be parametric only. I.e. no bitmaps are supported. You can look
  714. at the given libraries while reading this appendix for better understanding.
  715.  
  716.     Empty lines and lines starts with '#' are ignored. In order to identify
  717. a library as such the first line must start with 'EEDRAW-LIB'. Following in
  718. the same line is version number as 'Version X.X'. Currently 'X.X' equal '1.0'
  719. and is ignored. However it may be used in future versions, to ensure backward
  720. compatibility. Following are the parts themselves. Each part definition begins
  721. as follows:
  722.  
  723. DEF Name Prefix #Pins TextInside DrawNum #Units #PinsPerUnit
  724.  
  725. Were    1. Name is the Part name, i.e. "74LS00". If Name is prefixed with "~"
  726.        (for example "~74LS00") then the name is not drawn, nor it will be
  727.        accessible to the user.
  728.     2. Prefix is the prefix to be used in chip name (IC, R, C etc.). If
  729.        prefix is "~", then no prefix is drawn.
  730.     3. #Pins is the same as number of entries in PINS (see below),
  731.        i.e 14 for 74LS00.
  732.     4. TextInside is 0 if pin text is to be put outside as well (as the
  733.        pin numbers are), otherwise inside. You may put any positive
  734.        integer there to scale the distance inside. 10 is a good start.
  735.     5. DrawNum is 1 if pin numbers are to be drawn, 0 otherwise.
  736.     6. #Units holds number of multiple entries. For example 74LS00 has
  737.        4 units (Nand gates). For no multiple units put 0 here.
  738.     7. #PinsPerUnit holds number of entries for one unit if more than
  739.        one unit per part. If #Units is 0, it is ignored.
  740.  
  741. The part definition follows by the following blocks, in any order:
  742.  
  743. 1. DRAW/ENDDRAW - defines how to draw the part. This block is optional, and
  744.    a simple box with half the pins on each side is drawn if this block is
  745.    not defined. The following commands are supported:
  746.    A x y r t1 t2        (Define ARC at x, y, radius r, angles t1 to t2)
  747.    P n x y x y x y... [F]    (Define a POLYLINE of (any) length n)
  748.    C x y r            (Define a CIRCLE at x, y, radius r)
  749.    S x1 y1 x2 y2        (Define a square (Not filled))
  750.    T x y h str            (Define a text string at x, y (see below))
  751.    L x1 y1 x2 y2 [I]        (Define terminal line to part - see PINS)
  752.  
  753.    Notes:
  754.    A. a text string (S) with be drawn horizontally if h is 1, vertically if 0.
  755.       Also '~' characters will be replaced by spaces, or this provides a
  756.       mechanism to have spaces in the string.
  757.    B. If the polyline (P) is postfixed by a F, the polyline should define a
  758.       closed shape that will be filled. The first point of the polyline must
  759.       be identical to last one in this case.
  760.    C. If the line (L) is postfixed by an I, this line is assumed to define
  761.       negative logic, and a small circle will be drawn to express that.
  762.    D. The number of L definitions should be exactly the same as #Pins in the
  763.       DEFS line if #Units = 0, and equal #PinsPerUnit if #Units != 0.
  764.       The order will match to the order in the PINS/ENDPINS block if #Units = 0
  765.       and to the order in the MULTI/ENDMULTI if #Units != 0.
  766.    E. Arcs (A) should not exceed 180 degrees, are CCW, and 0 degrees is at
  767.       3 o'clock.
  768.  
  769. 2. PINS/ENDPINS - defines the names (strings) associated with each pin. This
  770.    block must always exists, and it is the minimum required to define a part.
  771.    The block holds #Pins lines each hold the string defines that pin. This
  772.    order must be the same as define in the DRAW/ENDDRAW as L commands
  773.    (if DRAW/ENDDRAW block is defined), from pin 1 to #Pins. Empty lines
  774.    are allowed and defined with only '~' in them. Not sign for X (vertical bar
  775.    above it) is defined by ~X.
  776.  
  777. 3. MULTI/ENDMULTI - This block must exists iff #Unit != 0. Each line in this
  778.    provides a mapping from L terminal definitions in the DRAW/ENDDRAW block
  779.    to the pin numbers in a multi unit part. This is required as same L
  780.    terminal will have different pin number in different Units.
  781.    Each line in this block holds the pin numbers of a unit.
  782.    Number of lines should be equal to number units in part.
  783.  
  784. Part definition terminates with the ENDDEF line.
  785.  
  786. General Notes:
  787.  
  788. 1. All parts are scaled up to easy the access of a single pin (by 16, but you
  789.    should not wonder about it too much - its internal mapping to drawing
  790.    space).
  791. 2. Library file can hold any number of parts (at list one though...).
  792. 3. Library file must have '.lib' extension, to be usable by the EED* programs.
  793.  
  794.  
  795. Gershon Elber
  796. Email: gershon@cs.utah.edu